<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对象</title>
    <script>
    /*
    使用工厂方式创造对象
     */
    function create(name,age,gender){
        var obj=new Object();
        obj.name=name;
        obj.age=age;
        obj.gender=gender;
        return obj;
    }
    /*使用工厂方法创建的对象，使用的构造函数都是object
      无法区分出多种不同的对象
     */
    /*                   构造函数
    构造函数和普通函数的区别就是调用方式不同
    普通函数直接调用，而构造函数使用new关键字调用
    构造函数的执行流程
        1.立刻创建一个新的对象
        2.将新建的对象设置为函数的this
        3.逐行执行函数中的代码
        4.将新建的对象作为返回值返回
     */
    //使用同一个构造函数创建的对象，我们称为一类对象，也将一个构造函数称为一个类
    //通过一个构造函数创建的对象，称为该类的实例
    function Person(name,age,gender){
        this.name=name;
        this.age=age;
        this.gender=gender;
    }
    var per= new Person();
    /* 使用instanceof 可以检查一个对象是否是一个类的实例
      语法：
      对象 instanceof 构造函数
      如果是，返回true，如果不是，返回false
     */
    console.log(per instanceof Person);
    /*
    当我们直接在页面中打印一个对象时，事件上是输出的对象的toString()方法的返回值
    如果我们希望输出对象时，不输出[object object]，可以重写toString()方法
     */
    Person.prototype.toString=function(){
        return "Person[name="+this.name+",age="+this.age+",gender="+this.gender+"]";
    }
    console.log(per._proto_._proto_.hasOwnProperty("toString"));
    </script>
</head>
<body>
</body>
</html>